home *** CD-ROM | disk | FTP | other *** search
/ Macworld Expo - Develope…Central & Net Innovations / Developer Central and Net Innovators (MacWorld Expo) (January 1999).iso / Developer Central / Bowers Development / Demo AppMaker / Examples / PowerPlant / Everything / CEditText.cp < prev    next >
Encoding:
Text File  |  1998-10-11  |  7.0 KB  |  318 lines  |  [TEXT/CWIE]

  1. // CEditText.cp -- window methods
  2.  
  3. #include "CEditText.h"
  4.  
  5. #include <UEnvironment.h>
  6. #include <UReanimator.h>
  7. #include <URegistrar.h>
  8. #include <LStream.h>
  9. #include <LTabGroup.h>
  10. #include <LEditText.h>
  11. #include <LAMEditTextImp.h>
  12. #include <LGAEditTextImp.h>
  13. #include <LScrollerView.h>
  14. #include <LScrollBar.h>
  15. #include <LAMTrackActionImp.h>
  16. #include <LStdScrollBarImp.h>
  17. #include <LTextEditView.h>
  18. #include <CDoubleEditText.h>
  19. #include <LClock.h>
  20. #include <LAMControlImp.h>
  21. #include <CTextUtils.h>
  22.  
  23. #include "DDocData.h"
  24. #include "DModalCheckboxesData.h"
  25. #include "DModalRadiosData.h"
  26. #include "DModalTextData.h"
  27. #include "DModalStuffData.h"
  28. #include "DModalBarsData.h"
  29. #include "DModelessCheckboxesData.h"
  30. #include "DModelessRadiosData.h"
  31. #include "DModelessTextData.h"
  32. #include "DModelessStuffData.h"
  33. #include "DModelessBarsData.h"
  34. #include "EverythingCmds.h"
  35.  
  36. const MessageT    msgSmall    = 'Smal';
  37. const MessageT    msgX12345    = 'X145';
  38. const MessageT    msgX12345e6    = 'X126';
  39. const MessageT    msgPassword    = 'Pasd';
  40. const MessageT    msgDate    = 'Date';
  41. const MessageT    msgTime    = 'Time';
  42.  
  43. #define PPob_EditTextID    204
  44. #define RidL_EditTextID    204
  45.  
  46. Boolean        CEditText::sIsRegistered = false;
  47.  
  48. //----------
  49. CEditText*        CEditText::CreateEditText (
  50.     LCommander*        inSuperCommander,
  51.     DDocData*        inData)
  52. {
  53.     if (!sIsRegistered) {
  54.         RegisterClass ();
  55.     }
  56.  
  57.     CEditText*        window;
  58.     window = (CEditText *)LWindow::CreateWindow(PPob_EditTextID, inSuperCommander);
  59.     window->ConnectToData (inData);
  60.     return window;
  61. }
  62.  
  63. //----------
  64. #define    RegisterClasses(AbstractClass,AMImpClass,GAImpClass)    \
  65.     RegisterClass_(AbstractClass);    \
  66.     if (useAppearance) {    \
  67.         RegisterClassID_(AMImpClass, AbstractClass::imp_class_ID);    \
  68.     } else {    \
  69.         RegisterClassID_(GAImpClass, AbstractClass::imp_class_ID);    \
  70.     }
  71.  
  72. //----------
  73. void    CEditText::RegisterClass ()
  74. {
  75.     Boolean        useAppearance = UEnvironment::HasFeature (env_HasAppearance);
  76.  
  77.     RegisterClass_(CEditText);
  78.  
  79.     // register the pane classes we use
  80.     RegisterClasses (LEditText, LAMEditTextImp, LGAEditTextImp);
  81.     RegisterClass_(LScrollerView);
  82.     RegisterClasses (LScrollBar, LAMTrackActionImp, LStdScrollBarImp);
  83.     RegisterClass_(LTextEditView);
  84.     RegisterClasses (CDoubleEditText, LAMEditTextImp, LGAEditTextImp);
  85.     RegisterClasses (LClock, LAMControlImp, LAMControlImp);
  86.  
  87.     sIsRegistered = true;
  88. }
  89.  
  90. //----------
  91. CEditText::CEditText (
  92.     LStream*    inStream)
  93.     : LWindow (inStream)
  94. {
  95. }
  96.  
  97. //----------
  98. CEditText::~CEditText ()
  99. {
  100. }
  101.  
  102. //----------
  103. //    This member function gets called once the containment hierarchy that contains
  104. //    this pane has been built. It gives us a chance to get data members for
  105. //    interesting subviews, and to do other operations now that our subviews exist.
  106. void    CEditText::FinishCreateSelf ()
  107. {
  108.     mSmallField = (LEditText*) FindPaneByID ('Smal');
  109.     mSmallField->AddListener (this);
  110.  
  111.     mLargeField = (LTextEditView*) FindPaneByID ('Lare');
  112.  
  113.     mX12345Field = (LEditText*) FindPaneByID ('X145');
  114.     mX12345Field->AddListener (this);
  115.  
  116.     mX12345e6Field = (CDoubleEditText*) FindPaneByID ('X126');
  117.     mX12345e6Field->AddListener (this);
  118.  
  119.     mPasswordField = (LEditText*) FindPaneByID ('Pasd');
  120.     mPasswordField->AddListener (this);
  121.  
  122.     mDateField = (LClock*) FindPaneByID ('Date');
  123.     mDateField->AddListener (this);
  124.  
  125.     mTimeField = (LClock*) FindPaneByID ('Time');
  126.     mTimeField->AddListener (this);
  127.  
  128.     mStyledField = (LTextEditView*) FindPaneByID ('Styd');
  129.  
  130.  
  131.     LTabGroup*        tabGroup = new LTabGroup(this);
  132.     mSmallField->SetSuperCommander(tabGroup);    // becomes the active field
  133.     mLargeField->SetSuperCommander(tabGroup);
  134.     mX12345Field->SetSuperCommander(tabGroup);
  135.     mX12345e6Field->SetSuperCommander(tabGroup);
  136.     mPasswordField->SetSuperCommander(tabGroup);
  137.     mDateField->SetSuperCommander(tabGroup);
  138.     mTimeField->SetSuperCommander(tabGroup);
  139.     mStyledField->SetSuperCommander(tabGroup);
  140.  
  141.     UReanimator::LinkListenerToControls(this, this, RidL_EditTextID);
  142.         // "connect" self to our controls that we want to "listen" to
  143.  
  144.     // any additional initialization for your window:
  145. }
  146.  
  147. //----------
  148. void    CEditText::ConnectToData (
  149.     DDocData*        inData)
  150. {
  151.     mData = inData;
  152.     mData->AddListener (this);
  153.  
  154.     CTextUtils::SetText (mSmallField, mData->GetSmall ());
  155.     CTextUtils::SetText (mLargeField, mData->GetLarge ());
  156.     mX12345Field->SetValue (mData->GetX12345 ());
  157.     mX12345e6Field->SetDValue (mData->GetX12345e6 ());
  158.     CTextUtils::SetText (mPasswordField, mData->GetPassword ());
  159.     {
  160.         LongDateRec        dateTime = mData->GetDate ();
  161.         mDateField->SetLongDate (dateTime);
  162.     }
  163.     {
  164.         LongDateRec        dateTime = mData->GetTime ();
  165.         mTimeField->SetLongDate (dateTime);
  166.     }
  167.     CTextUtils::SetText (mStyledField, mData->GetStyled ());
  168. }
  169.  
  170. //----------
  171. void    CEditText::DataChanged (
  172.     long        inDataID)
  173. {
  174.     StopListening ();
  175.  
  176.     if (inDataID == idSmall) {
  177.         if (!mSmallField->IsTarget ()) {
  178.             CTextUtils::SetText (mSmallField, mData->GetSmall ());
  179.         }
  180.     }
  181.     if (inDataID == idLarge) {
  182.         CTextUtils::SetText (mLargeField, mData->GetLarge ());
  183.     }
  184.     if (inDataID == idX12345) {
  185.         if (!mX12345Field->IsTarget ()) {
  186.             mX12345Field->SetValue (mData->GetX12345 ());
  187.         }
  188.     }
  189.     if (inDataID == idX12345e6) {
  190.         if (!mX12345e6Field->IsTarget ()) {
  191.             mX12345e6Field->SetDValue (mData->GetX12345e6 ());
  192.         }
  193.     }
  194.     if (inDataID == idPassword) {
  195.         if (!mPasswordField->IsTarget ()) {
  196.             CTextUtils::SetText (mPasswordField, mData->GetPassword ());
  197.         }
  198.     }
  199.     if (inDataID == idDate) {
  200.         LongDateRec        dateTime = mData->GetDate ();
  201.         mDateField->SetLongDate (dateTime);
  202.     }
  203.     if (inDataID == idTime) {
  204.         LongDateRec        dateTime = mData->GetTime ();
  205.         mTimeField->SetLongDate (dateTime);
  206.     }
  207.     if (inDataID == idStyled) {
  208.         CTextUtils::SetText (mStyledField, mData->GetStyled ());
  209.     }
  210.  
  211.     StartListening ();
  212. }
  213.  
  214. //----------
  215. void    CEditText::ListenToMessage (
  216.     MessageT    inMessage,
  217.     void*        ioParam)
  218. {
  219.     switch (inMessage) {
  220.     case msgDataChanged:
  221.             DataChanged ((long)ioParam);
  222.         break;
  223.  
  224.     case msgSmall:
  225.         {
  226.             Str255        string;
  227.  
  228.             mSmallField->GetDescriptor (string);
  229.             mData->SetSmall (string);
  230.         }
  231.         break;
  232.  
  233.     case msgX12345:
  234.             mData->SetX12345 (mX12345Field->GetValue ());
  235.         break;
  236.  
  237.     case msgX12345e6:
  238.             mData->SetX12345e6 (mX12345e6Field->GetDValue ());
  239.         break;
  240.  
  241.     case msgPassword:
  242.         {
  243.             Str255        string;
  244.  
  245.             mPasswordField->GetDescriptor (string);
  246.             mData->SetPassword (string);
  247.         }
  248.         break;
  249.  
  250.     case msgDate:
  251.         {
  252.             LongDateRec        dateTime;
  253.  
  254.             mDateField->GetLongDate (dateTime);
  255.             mData->SetDate (dateTime);
  256.         }
  257.         break;
  258.  
  259.     case msgTime:
  260.         {
  261.             LongDateRec        dateTime;
  262.  
  263.             mTimeField->GetLongDate (dateTime);
  264.             mData->SetTime (dateTime);
  265.         }
  266.         break;
  267.  
  268.     default:
  269.           ; // do something
  270.         break;
  271.     }
  272. }
  273.  
  274. //----------
  275. Boolean        CEditText::ObeyCommand (
  276.     CommandT    inCommand,
  277.     void*        ioParam)
  278. {
  279.     Boolean        cmdHandled = true;
  280.  
  281.     if (inCommand < 0) {
  282.         // modal dialog has finished
  283.  
  284.         switch (-inCommand) {
  285.         }
  286.  
  287.     } else {
  288.         switch (inCommand) {
  289.  
  290.         default:
  291.                 cmdHandled = LWindow::ObeyCommand(inCommand, ioParam);
  292.             break;
  293.         }
  294.     }
  295.  
  296.     return cmdHandled;
  297. }
  298.  
  299. //----------
  300. void    CEditText::FindCommandStatus (
  301.     CommandT    inCommand,
  302.     Boolean        &outEnabled,
  303.     Boolean        &outUsesMark,
  304.     Char16        &outMark,
  305.     Str255        outName)
  306. {
  307.     outUsesMark = false;
  308.  
  309.     switch (inCommand) {
  310.  
  311.  
  312.     default:
  313.             LWindow::FindCommandStatus(inCommand, outEnabled,
  314.                                         outUsesMark, outMark, outName);
  315.         break;
  316.     }
  317. }
  318.